0L0򠳮(  Error: No DOS(0 )0 / 0/(0/)00ֹ/ / Ȅ`l0  1 1%7x0 1 1 18H 1(哅h k1 y0L0l00DEH B VL0@   Y0`0.` a000. 08&.` 0mm 8 L1ƕƔ 1擥`?(MAIN 1X32G DOS^' 1X32GX DOS^' aTDLINE COM^ wCHANGES 32G ^): & FTE TXT ^"$=DIRT COM e*JDIRT DOC e*w8DIRT M65 e*DIRTY TLK e+9README NOW e+_!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^~S28$HHH өH*HHllhhh@HHLH|)ӝtI)MӍ|hh`HH||)thh(`44DEPH BLV `)`` '4 4 4Ȣ4 4LI4 4 w4 4x '4 44X 4) ~`8 '4 4 4L4L4Error: Not an XL/XE Computer.4.4o5} SpartaDOS Ver 3.2g 04-Jun-94 Copyright (C) 1994 by FTee 4.4 4 4G)@opqr}S  EEFw Eks4o _5 _5" #    R ^5  R ^5 , R5 4LL- L LL=Ei ȱEi `w40 `` 7 YL\ 2BHG H-G H ةHhJ \hBL\`@B 442@3Y45245324 `L1( (ҩmi:; < =x:23454 Μ ,  w ,P lνе X0`234 5` P21 ,350 2 9 4 2 9 LD1 9)ҢL1,350 &2 4 2 1`08` S< ACE,0ɋ8` `ύ&'0`e1i1`,07 ,ߍҩҭҍ )  `_ҩҩ,,,8`H)ҩh `#,ҍ ҩ(ҥA,ҩҩ`jj)?j)`Ң`H?ʎ @  0h ``@@B,~-32@3452453^24` &;232)`ȱ28e2ȱ2  ( &L`Not SpartaDOS disketteDisk fullFile not foundIllegal wildcard in nameNot binary fileFile erase protectedDisk write lockedDirectory not foundBreak AbortWrite protected or bad sectorFile name errorFunction not supportedCan't deleteFile existsNonexistent deviceTruncated recordDevice timeoutDevice NAKSerial frame errorSerial bus overrunChecksum error r H r(0 LK  H0aE T©EGIÍFHYOO|}h   I T©   I `L E8LE`@D b, ̍]̍^])̝B]JJJJJ ̝D̝E^0 KJ)̝J^JJ)̝H̝I D@`   Ϭ`,0),~ ab FError -- &L`(),! *+  -"#$./0t@ @CA똩)*K HJJJJ 9h) 0:iL(hWhXWXͭ (LNͭXHWH`ab`, Nbnan` ͠ɢ͎͌͢ͽ (`΢ܩ,0  ͭ```.a.b*N`  .` 00` a bʩ 뮋`t$%` Π`a vAG) .`.aܭ`a` 1'H` :D1H'` W@ ύ Wu ύ 乀 Lq Ω* #*Z +DLϠ ̠ ̭0L0f +  TϮ Tϭ /A ̠{fl LLυCυD. ϠC  婛蝀`pȹt L]̍]` ̢0 8̽ H̽I̠0 (ʢ 0L *)L* *M @ L ( no`L(= # ,   `( L#(k) LL L I0    ! eno , lʎmi +L Ckl%m&L] +   KQ`) x%l&mBk L  k,  ,)ߍk "LLL  ,] + # F حk)  "L  밻k) 멀k "L`VWX ,LYZ V WL_Lj  Lj$H0L_88A e , n eECFD8  8  9L H ,C]Dah LCD L  8L LL$H0 n ,LxECFD   9LCCC)` LZCC C`]C`C]`  EFL F`8mYYZiZ`WVV *L9%& Z"Cd S cd`L cd |C8 CDC}OCȱC}PC`  eCCD`  Z!kC``I p!!i  ?! xk0,)C) `I I!  k08` !CkL # ,  `1@R QH10>h>0   * HH H0hh`hh,L L { P*)0 +*`*)& F*$+0Q` {!*B s <!=/ P {0*)((a,,,L j) *)  I0 , kl*) j I  + I  F  ,) *I *c +L U*) + ;`L,D0 F) MI $ + (( 'N Gk? L  Z v #(> sL L,0`H hɛ ,'L+,L P*H * {0h*L+4*  0 j)L Lq * { M {0Yj)j *LJ, -* { M {0 j,  ,)j LkL, LLLL: * {, (] + # F M {0 LL8*  m* +I LL,H 1N'k?l> Go,1 s d:D>` 3FII/E?F I?FE}ۦI`  HVWjL$VWXeIWVL;im LFhLF  #`L  v'* ? c. cn L8n LG cL0 ,  `@`$0:?[ {_)_`8`$: ` K?p`i + mno` ,l _zʈ` ?@`L klmn G mn klef ef F CcȱCdȌ c |L&CHȱCH + |hhда`  H :0+Y-Z! YmZn &$+0 5 `L  :0=Y-Z :0,8[YS\ZTST :0 $+0 8 `` HYZ$+0 : ΍YZ ΍[\ L&OVPWUVL$Y[LV,D0L;L,D0 L,D ]L]`)L 9 %,G ,D0H ' VʎW $L(V)W$% $0 VWV8(V()W)$mV$%mW%$`μ0Q佒Q`,0 6 +,D" "f+L C`ȱCa+Lu* {.9 + ͢ F$+0l + 0,L$+0p $+ $+L\lm,D0,mno `a *, *im`a`ab ͭ 0 ,Dk)C <>k) "j) čɍҍj)*LB + ͠E +j)  +  # ͌QL~   ͩ: ͭ ͩ: ͭ ͩa~ p ͩmLͭ| ͩ- ͭ{ ͩ- ͭ} L͢$ ` 6e(ȭ(ȢN(U(k(ȭl(ȭo(` eȱCOL,~LL # rLH ʈ`1N@E 1!@E1S@@8` v P ! > Ȣp ֬ >(ȩ(` (H(h `*$/ȱ$Aȩ *$$ `2Kd}j] H +K +8VV}V )L ,08JWXVmHh [\8Jm[[\ ,\ .[m[\L\[͊ }8[[\L[ iL:EFX,DL) T +N + V W Q +` >$H n cdL)L  CȭC Z 1VWVVV * cLW n)H   EF  cLW FLWFАՐ#eCCD$H0CELREC `abcdefghijklmnopqrstuvwxyz{|}~$H Z8mLW V``H=L ` cd  cC Zcd`LFVVW8EmEF8m W +`8"]`8]V`CȱC`CȱC`  cCD ` /䭂 ?,06/O䍁)/́?͂}` !O`)>8O,0, } ,0} 3,0 3JHjmoChmpD`H)h)/ ?  !CD8 ` ` i }L:CC, CȭC cCȭdC ZL . `)Α,0) 1  C&- L,L  d S,d1c0+}O+,}P,` .dcC  cc I1CC`c d  CC,D0  L/L;c0d1` N j  ,D0 (` Zc)8j`m. F`, HJjhj`, H**hJ`Z*XY*` + `y"U a ې;ݒ- ;m ; - ;  ]!K`Z6<` I@ɛ͏a{)ߝt㩛t8`t8)ɀuɛȹ`COPLOASAVAPPENCERASRENAMMRCARUPRINTYPDIDIRMEPAUSVERIFBOOCHKDSPROTECUNPROTECLOCUNLOCXDI?DIBASITIMDATTKE,,,,L̩w` |PWQ`== 7sl FNo cart` ̭7 F Volume:  ͭ  ( 0ͩ ( 0 F͛Sector Size: b`0a F͛Total Bytes:  l F͛ Bytes Free:  lͭ ' F͛ Write Lock: ,0 FOFFLy FONL& Z Z, ̠ 0  BLL tL   7 L\l FPress any key to continue L& FMemlo: $ 0ͭ 0 F Memhi: $ 0ͭ 0ͩL ̠ ̠ |M)MӍӌj Et нl]бwO xF  IL*J` |L |L FCurrent` F͛Enter new` F time:` F date: `        p- Bɛ; `abL       p: ɛ FParameter Error`ɛ )_PAө, m   cL `:8` ) m i `ȹ 0:`L `{` 7 VL\ 7 L\%H$H`()}`LPLI L   UآD1:autorun.sysstartup.bat*.*.COM.BATD1:Volume: Directory: FREE SECTORS LI ~S28$HHH өH*HHllhhh@HHLH|)ӝtI)MӍ|hh`HH||)thh(`44DEPH BLV `)`` '4 4 4Ȣ4 4LI4 4 w4 4x '4 44X 4) ~`8 '4 4 4L4L4Error: Not an XL/XE Computer.4.4\5} SpartaDOS Ver 3.2gx 04-Jun-94 Copyright (C) 1994 by FTee 4.4 4 4G)@čpS  EEFw Ekt4o L5 L5" #    R K5  R K5 , ?5 4LL- L LL=Ei ȱEi `x40 `` 7 YL\ 2BHG H-G H ةHhJ \hBL\`@B 442@3Y45245324 `L1( (ҩmi:; < =x:23454 Μ ,  w ,P lνе X0`234 5` P21 ,350 2 9 4 2 9 LD1 9)ҢL1,350 &2 4 2 1`08` S< ACE,0ɋ8` `ύ&'0`e1i1`,07 ,ߍҩҭҍ )  `_ҩҩ,,,8`H)ҩh `#,ҍ ҩ(ҥA,ҩҩ`jj)?j)`Ң`H?ʎ @  0h ``@@B,~-32@3452453^24` &;232)`ȱ28e2ȱ2  ( &L`Not SpartaDOS disketteDisk fullFile not foundIllegal wildcard in nameNot binary fileFile erase protectedDisk write lockedDirectory not foundBreak AbortWrite protected or bad sectorFile name errorFunction not supportedCan't deleteFile existsNonexistent deviceTruncated recordDevice timeoutDevice NAKSerial frame errorSerial bus overrunChecksum error r H r(0 LK  H0aE T©EGIÍFHYOO|}h   I T©   I `L E8LE`@D b, ̍]̍^])̝B]JJJJJ ̝D̝E^0 KJ)̝J^JJ)̝H̝I D@`   Ϭ`,0),~ ab FError -- &L`(),! *+  -"#$./0t@ @CA똩)*K HJJJJ 9h) 0:iL(hWhXWXͭ (LNͭXHWH`ab`, Nbnan` ͠ɢ͎͌͢ͽ (`΢ܩ,0  ͭ```.a.b*N`  .` 00` a bʩ 뮋`t$%` Π`a vAG) .`.aܭ`a` 1'H` :D1H'` W@ ύ Wu ύ 乀 Lq Ω* #*Z +DLϠ ̠ ̭0L0f +  TϮ Tϭ /A ̠{fl LLυCυD. ϠC  婛蝀`pȹt L]̍]` ̢0 8̽ H̽I̠0 (ʢ 0L *)L* *M @ L ( no`L(= # ,   `( L#(k) LL L I0    ! eno , lʎmi +L Ckl%m&L] +   KQ`) x%l&mBk L  k,  ,)ߍk "LLL  ,] + # F حk)  "L  밻k) 멀k "L`VWX ,LYZ V WL_Lj  Lj$H0L_88A e , n eECFD8  8  9L H ,C]Dah LCD L  8L LL$H0 n ,LxECFD   9LCCC)` LZCC C`]C`C]`  EFL F`8mYYZiZ`WVV *L9%& Z"Cd S cd`L cd |C8 CDC}OCȱC}PC`  eCCD`  Z!kC``I p!!i  ?! xk0,)C) `I I!  k08` !CkL # ,  `1@R QH10>h>0   * HH H0hh`hh,L L { P*)0 +*`*)& F*$+0Q` {!*B s <!=/ P {0*)((a,,,L j) *)  I0 , kl*) j I  + I  F  ,) *I *c +L U*) + ;`L,D0 F) MI $ + (( 'N Gk? L  Z v #(> sL L,0`H hɛ ,'L+,L P*H * {0h*L+4*  0 j)L Lq * { M {0Yj)j *LJ, -* { M {0 j,  ,)j LkL, LLLL: * {, (] + # F M {0 LL8*  m* +I LL,H 1N'k?l> Go,1 s d:D>` 3FII/E?F I?FE}ۦI`  HVWjL$VWXeIWVL;im LFhLF  #`L  v'* ? c. cn L8n LG cL0 ,  `@`$0:?[ {_)_`8`$: ` K?p`i + mno` ,l _zʈ` ?@`L klmn G mn klef ef F CcȱCdȌ c |L&CHȱCH + |hhда`  H :0+Y-Z! YmZn &$+0 5 `L  :0=Y-Z :0,8[YS\ZTST :0 $+0 8 `` HYZ$+0 : ΍YZ ΍[\ L&OVPWUVL$Y[LV,D0L;L,D0 L,D ]L]`)L 9 %,G ,D0H ' VʎW $L(V)W$% $0 VWV8(V()W)$mV$%mW%$`μ0Q佒Q`,0 6 +,D" "f+L C`ȱCa+Lu* {.9 + ͢ F$+0l + 0,L$+0p $+ $+L\lm,D0,mno `a *, *im`a`ab ͭ 0 ,Dk)C <>k) "j) čɍҍj)*LB + ͠E +j)  +  # ͌QL~   ͩ: ͭ ͩ: ͭ ͩa~ p ͩmLͭ| ͩ- ͭ{ ͩ- ͭ} L͢$ ` 6e(ȭ(ȢN(U(k(ȭl(ȭo(` eȱCOL,~LL # rLH ʈ`1N@E 1!@E1S@@8` v P ! > Ȣp ֬ >(ȩ(` (H(h `*$/ȱ$Aȩ *$$ `2Kd}j] H +K +8VV}V )L ,08JWXVmHh [\8Jm[[\ ,\ .[m[\L\[͊ }8[[\L[ iL:EFX,DL) T +N + V W Q +` >$H n cdL)L  CȭC Z 1VWVVV * cLW n)H   EF  cLW FLWFАՐ#eCCD$H0CELREC$H Z8mLW V``H=L ` cd  cC Zcd`LFVVW8EmEF8m W +`8"]`8]V`CȱC`CȱC`  cCD ` /䭂 ?,06/O䍁)/́?͂}` !O`)>8O,0, } ,0} 3,0 3JHjmoChmpD`H)h)/ ?  !CD8 ` ` i }L:CC, CȭC cCȭdC ZL . `)Α,0) 1  C&- L,L  d S,d1c0+}O+,}P,` .dcC  cc I1CC`c d  CC,D0  L/L;c0d1` N j  ,D0 (` Zc)8j`m. F`, HJjhj`, H**hJ`Z*XY*` + `y"U a ې;ݒ- ;m ; - ;  ]!K`Z6<` I@ɛ͏a{)ߝt㩛t8`t8)ɀuɛȹ`COPLOASAVAPPENCERASRENAMMRCARUPRINTYPDIDIRMEPAUSVERIFBOOCHKDSPROTECUNPROTECLOCUNLOCXDI?DIBASITIMDATTKE,,,,L̩w` |PWQ`== 7sl FNo cart` ̭7 F Volume:  ͭ  ( 0ͩ ( 0 F͛Sector Size: b`0a F͛Total Bytes:  l F͛ Bytes Free:  lͭ ' F͛ Write Lock: ,0 FOFFLy FONL& Z Z, ̠ 0  BLL tL   7 L\l FPress any key to continue L& FMemlo: $ 0ͭ 0 F Memhi: $ 0ͭ 0ͩL ̠ ̠ |M)MӍӌj Et нl]бwO xF  IL*J` |L |L FCurrent` F͛Enter new` F time:` F date: `        p- Bɛ; `abL       p: ɛ FParameter Error`ɛ )_PAө, m   cL `:8` ) m i `ȹ 0:`L `{` 7 VL\ 7 L\%H$H`()}`LPLI L   UآD1:autorun.sysstartup.bat*.*.COM.BATD1:Volume: Directory: FREE SECTORS LI P S`P S Q Q Q S% DPELP) 0SJJJJ 0SxH)Ӡ QhX QH)ӠDP  hөÍDPEPH BLVTD ONTime/Date Display Line Installed** TDLINE -- Not SpartaDOS 2.6 (or >)L#QLQ SQ`H Ә wS \@b \0 01S)8S0CS1DCA0Cȭ1Ch`QH) h`,Q8`ΕQRR RQ`R8TidSH)hJJ8mSmRR}RiR RR RR R RR cR RRR RR RR R RR `R RS   cR RS `R RS `RaS p Rm R RQ`,_R8 i H,_R0  Rh)I0` ,:,-SSMTWTFauouehrtnneduiJFMAMJJASONDaeapauuuecoenbrrynlgptvc R  RR (`pp0BSSpartaDOS 2.5 ;SSɢS! Q ZS ZSS`HS`i` Sh8`vSOvS ;S0 1S9HH0iS1iSA 0ȩS1hhLbS|UTTTT T`8TT TmTȱmTL$T T mTLS!Q4QwOQ S S TQQP      !"#$%What's new in SpartaDOS version 3.2g************************************Version 3.2f could only access driveID numbers from D1-D8. Now, you canaccess drive D9.************************************A filespec that does not contain adrive number, such as D:TEST, willnow default to your currently loggeddrive on the command line.For example, if you are logged to D4:a filespec of D:TEST will be convertedto D4:TEST, instead of D1:TEST as itused to be. This change can be veryuseful when running programs fromdifferent drive numbers, since youcan access files with D: and theywill automatically be taken fromwhichever drive the program was was started from.You must now be careful however, toalways type D1: when you need to access drive 1 specifically.************************************A file will no longer be destroyedwhen copying it to itself. The DOSchecks for this condition, and willreport a 'File exists' error.Commands such as: D4:COPY D4:TESTwill no longer destroy the file TEST.************************************All command line input, including allcommands, files, and drive IDs, cannow be entered in either lower case orupper case. Lower case was onlypartially supported in version 3.2f.************************************Some commands have been changed, tomake them more compatible with the Xcartridge, as well as making themeasier to type. The following changeshave been made:CWD has been changed to CD.CREDIR is now MD (Make Directory).DELDIR is now RD (Remove Directory).Note that with the Remove Directoryfunction now called RD, the RD.COMramdisk handler needs to be renamedto RM.COM in order for it to work.(This will be the name of the MARS8 compatible driver to be released.)************************************ There are many additional errormessages, so you should no longer seeerror numbers on the command line.************************************A system lock-up bug has been fixed,when the clock wraps from 12-31-1999to the year 2000. Also, the day of the week offsethas been corrected for years after2000, in the new TDLINE program.We are 5 1/2 years 'ahead of time'************************************Program files containing a RUNAD, cannow be reentered with the RUN commandafter returning to DOS. The normalprocess of saving the starting addressfor a .COM file into Sparta's internalvariables, was disrupted when the filecontained a RUNAD address. This hasnow been fixed, so all program fileswill behave the same way, whether ornot they include the RUNAD address.************************************Several changes have been made to thekeyboard buffering routines. Whenholding a key down for auto-repeat,the buffer will not fill up withexcess characters that the applicationprogram hasn't used yet. There willat most, be one additional characterin the buffer during a key repeat.This means that when you release akey, the repeat process stops rightaway, whereas there could have beenmany additional keycodes 'stacked up'when using version 3.2f.The key combination Shift-Control-Esccan be used to clear all of the keyscurrently stored in the buffer. Thisgives you a way to cancel everythingin the buffer when a situation mayrequire you to abort.************************************ The 1200XL key functions such as DMAoff, keyclick toggle, and keyboardlock, now work properly.************************************The key buffer NOW DEFAULTS to OFFdue to incompatabilities with certainprograms. It can always be activatedas part of a STARTUP.BAT file using'key on' (even in lower case), if youwould like this feature enabled.************************************ The AINIT command was removed from thecommand line. However, the XIO Atariformat function can still be usedwithin application programs.************************************Even with all these changes, the DOSfile size has been reduced by 260bytes, and the lomem has been dropped119 bytes. If you do not have a PBIdevice, your lomem will be at $17A2.Users with a PBI device will findtheir lomem at $1BA2, since the bufferspace uses 1K at lomem, instead of the$D800 PBI area.************************************ FTe has decided to release a special3.2 'gx' version that can bring memlo back down to $17A2, by placingthe disk buffers under the OS at$C400. This has an added benefit ofusing a full 2K of buffer space,instead of the 1K space allocated atmemlo, and will help the DOS runfaster.However, SpartaDOS 3.2 'gx' is NOTCOMPATIBLE with BASIC XE, or anyother programs using the RAM under theOS from $C400-$CBFF. It is providedfor those users who don't require thiscompatibility, and who would like tohave the additional RAM available.NOTE that if you ARE NOT using a PBIdevice, (such as an MIO or Black Box)you do not need the special 'gx'version, and will already get the 2Kbuffer space and $17A2 lomem withusing the STANDARD 3.2g version.************************************ SpartaDOS 3.2g and 3.2gx are beingreleased as Shareware on an AS-ISbasis. If you do happen to discoverany incompatibilites, please don'thesitate to let us know, so that wemight be able to fix the problemin any future revisions.This upgrade was made possible byeveryone out there who took the timeto register 3.2f Thank You!************************************If you like what you see, you mayregister 3.2g by sending $19.95 to Fine Tooned Engineering PO Box 66109 Scotts Valley, CA 95067This will get you all 3 manuals inaddition to the SpartaDOS Toolkit.************************************'()*+,-./0123456789:;< 6/9/94 Well, it's summer already and FineTooned Engineering is still aliveand kicking. The last 6 months hasbeen the most challenging that we'veever experienced. The business has had its problems though, and now is agood time to address them. The three biggest ones are...A) It's difficult to reach somebody on the phones.B) It's taken longer than it should to get some products shipped.C) The Catalog still isn't ready. These problems do exist, and it isour first priority to get them fixed. Starting June 15th, the phone willbe answered between 11am and 4pm PST. We are switching over to UPS as our primary carrier, and will be scheduling pickups twice a week untilorders are sufficient enough to shipdaily. This will also be in effectby 6/15. FTe has aquired Newell Industries,so our catalog has been expandedconsiderably. We are really trying to go "first class" with its prod-uction, so please be patient as itwill be worth the wait! (Hint: Pick up the June/July issue of Current Notes)Everybody makes mistakes, and FTe isno exception to this rule. The time,expenses, and resources needed in manufacturing, shipping/handling, andR&D has been much greater thananticipated. So...Starting July 1st, we will have tostart charging for shipping andhandling in addition to putting a$50 minimum on Credit Card orders.The 800 line is for COD or CreditCard orders only, and will be answered 24 hours a day by ourin-house voice mail system.If you need technical information,or simply just want to chat, pleasecall us at 408-438-7325 between 11amand 4pm PST. If you get transferredto the Voice-Mail System on this lineafter the first ring during businesshours, please leave a voice # and yourcall will be returned within 30 Min.The Fine Tooned BBS is up and runningat 408-438-6775. It needs a lot ofwork, and should have 9600 baud support sometime in July. There justisn't enough hours in a day to properly maintain it right now, andwe expect that it will take untilthe end of summer to get it up tostandards.The MARS8 Project has been delayed afew more weeks as we have decided toadd a 65816 processor! The additionalexpense shouldn't cost more than $25,and the reduced power consumption andexpanded instruction set will make itinvaluable for future enhancements.Well, that about wraps it up. We hope that you will continue to support FTe through good times as well as bad, so that the MARS8 andother new products may continue tobe developed and supported. Thanks, Mike>?@ABCDEFGHIPPLQ00000000 *+-.0123456789:<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZDIRT Version 1.0Copyright 1990 Charles K. HughesVolume: Directory: Free Sectors: 00000 . ..... P&Q - - gQnQDD:*.*QR??????????? U ѥ i?хР&QɛgQLvS @`QȱɛH!Q ``O`&Q'Q&Q QîQQй&Q`&Q'QgQLvS'Q+-DQȾ'QPIHIAISI DI@ `QgQLvSȹ(Q:RS)Q: (QiQ@ 'QiQgQ'QɛLvSP&Q'Q><\ PP(ȌPP'QkQP*kQmQ.lQnQ'Q*&Q'Q.-.Q&Qة QQQ3 Q&Q߹'Q*Q&Q Q/QhmgQST Qp V`QPQQQQQhmgQp V`%p V UQP BsDPE^HI V` )ULU :TL,T QPʈ. Q dP. sP. aP. hP. pPTUQ P UPP P ЩQѬ P#QQ P U PЈ8а P׭Q0 Q BDPE%HI Vhh` Qp V䬳`hh` U` Q)ꭢQQ+ Q-Q Q-Q̠ QQ? QQ쭟Q͠QЩ`U6VQ P UPP BэDPEHI V p V` P8 i: Pi0 P`PPP. P. P. P.P8P P. P. P. PPPi0PP¢P0 P`QKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv DIRT Version 1.0 Copyright 1990 Charles K. Hughes This is the version 1.0 release of DIRT - a new directory lister forSpartaDOS. Though meant specifically for 4.0+ it will work with anyversion of SpartaDOS except for 1.1. DIRT will give a listing of files similar to the standard DIR command inSpartaDOS, however, instead of giving the time a file was created, it givesa listing of the attributes for that file. Why use DIRT? Well, it is faster, shows the attributes, and is betterthan the standard DIR command in two ways. The first way is with regardto very large files - DIRT will show the full 8 bytes of file size (filescan be up to 16,000,000 bytes long) where the normal DIR command only showsthe lower 6 bytes of file size (any file greater than 999,999 bytes willhave the upper digits truncated). The second benefit is that DIRT can betold to NOT display certain files, regardless of their attributes. The standard form of the command is: DIRT [+|-phasd] [!] [] The options are used as follows: [+|-phasd] This option is used to specify the attributes of the files you wish to see. If you start the option with a '+' then ONLY those files that match the filename mask and have the attribute(s) specified will be listed. If you start the option with a '-' then ALL the files that match the filename mask EXCEPT those with the specified attribute(s) set will be listed. This option must appear before the path and filename. The letters refer to the following attributes: p - protected, bit 0 of the status byte. h - hidden, bit 1 of status byte. a - archived, bit 2 of the status byte. s - subdirectory, bit 5 of the status byte. d - defragmented, bit 6 of the status byte. (see note at end) [!] This is the NOT option and it tells DIRT to show only those files that DO NOT match the filename mask. This option can be placed anywhere on the command line, even inside the other options. [Dx:] or [D:] This option selects the drive. If the Dx: format is used, x is the drive looked at. If the D: format is used then the default drive is looked at, EXCEPT under SDX. [A-I:] or [1-9:] or [Da:] This option is valid only under SDX and is used instead of the drive options above. Regardless of the option, the drive (if given) must end with a colon or the results will be unpredicatable. If no drive specifier is given then the default drive is used. [pathname] The pathname must immediately follow the drive (if any). The pathname must be a valid pathname and end with a \, < or >. If no pathname is given then the current path is assumed. REMEMBER: Under SDX << and >> are not valid in a pathname. [filename mask] The filename mask must immediately follow the pathname or the drive specifier if either is given. The mask can be any combination of wildcards and valid filename characters. If no filename mask is given, then *.* is assumed. NOTE: There must be a space between 'DIRT' and any options in order forSpartaDOS to recognize the DIRT command. Likewise, there must be a spacebetween the attribute option and the drive/pathname/mask option. Theexclamation option can be placed anywhere and does not need to be set offby spaces. The filename and options can be in upper, lower, or mixed case, DIRTdoesn't care because it makes them all upper case before reading them.DIRT also ignores extra spaces between options EXCEPT there can be nospaces embedded in or between the drive, path, and filename. The source code is included with this file. It is in MAC65 format andwell commented (though not commented well :) so feel free to look throughit. Anyone who wishes to modify it is free to do so but if you wish todistribute the modified version you can only do so under these conditions: 1) You must distribute the modified source code with the object code. 2) You must give proper credit (to me and previous authors if any). 3) You cannot sell the program though a small fee (less than $5) maybe charged for copying & distribution. [Anyone who wishes to sell theprogram may contact me via the address below.] 4) You must include this same set of conditions in your distribution. ADVANCED USERS NOTE: The defragmentation bit doesn't officially exist but bit 6 of the statusbyte is unused by SpartaDOS so I decided that was the best way to keeptrack of a file that is not fragmented. This is of no particular valueto DIRT, but is very important to the defragmentation program that I amworking on. This bit is only valid as long as the file is not modifiedafter being defragmented. In addition, SpartaDOS may zero this flag butis unlikely to set it. If you feel this utility is something you could never live without,and have a burning desire to lighten your load and enrich the author,please feel free to send some of that green stuff burning a hole in yourpocket [plutonium is perfectly acceptable :) ]. If you have any questions or comments I can be reached at:BOB PUFFS BBS (716) 247-8355CLOSER TO HOME BBS (419) 368-4413ATARI BASE BBS (408) 745-5306BAAUG BBS (408) 986-0215PORTAL BB$ (408) 725-0561Usenet: Ordania-DM@cup.portal.com or Charles_Hughes@cup.portal.comOr USnail: Charles Hughes 555 E. Washington Ave. #301 Sunnyvale, CA 94086 Phone: (408) 732-7749xyz{|}~8EIX; X;DIRT SOURCE CODE X; X; PROTCT;; Protected bit $HIDDEN;; Hidden bit .ARCHIV;; Archived bit 8!SUBDIR ;; Subdirectory bit B!DEFRAG@;; Defragmented bit L$EOL;; set end of line marker V/COMTAB ;; where to look for Sparta stuff `CIOVV;; CIO Vector j INDEXt.BRKKEY;; Break key location, 0=pressed ~X; ,P;; get it up real high so it doesn't '!START;; interfere with anything. X; NUMBUF A00000000AX; DVEND ==  DLP X;  POINT  POINT2 X; X; #VALID A A======= ==A*+A==A-.A=# A0123456789:A==A?A( =AABCDEFGHIJKLMNOA2# APQRSTUVWXYZA==A\A===< =AABCDEFGHIJKLMNOAF! APQRSTUVWXYZA=====PX; Z HEADERd& EOL=EOL=ADIRT Version 1.0A=EOLn1 ACopyright 1990 Charles K. HughesA=EOL=EOLx AVolume: A VOLBUF A A=EOL ADirectory: A DIRBUF A A=EOL=EOLPRFS A Free SectorAFRESCT As: 00000A=EOLX; HLENPRFSHEADERX; FNAME A . AFATTR A..... AFLEN A AFMM A -AFDD A -AFYY A A=EOL"X; , ENTRY6STAT ==@LEN ==JNAME A ATDATE =====^DMIX ==hX; r#COUNT ;; position into lbuff |.LBUFF@;; command line buffer (64 bytes)  DFLAG  DEVICE ADD:A;; device name PATH A*.*A=EOL$;; pathname X; FMASK A???????????AX; .SFLAG ;; Previous char was a space flag NFLAG ;; NOT flag %IFLAG ;; Invalid filename flag 'ATTRIB ;; Attribute compare byte &ATYPE ;; type of attribute mask 4FSECT ==;; number of free sectors on disk X; X; Start of program X; &*X; Close IOCB #7 (Of course I cheat! :)0X; : STARTD CLOSE7NX; X.X; Copy command line buffer to DIRT buffer bX; l4QCOMTAB;; Get index to the SpartaDOS command vPINDEX;; line buffer  QCOMTAB,O>?DONE #INDEXONE PINDEXX; X; Do the copy and: :X; skip the file name of the command & first space (X; make all lowercase into upper 8X; set NOT flag if an exclamation point is found "X; delete all extra spaces X; .%>;; Start at beginning of Sparta buffer 5'COUNT;; and at the beginning of the DIRT buffer TWO* Q@INDEX74!R>EOL;; look for end of line >HT1H #DFLAGR !COM_EXIT\T1fR> ;; look for first space pFPT3z31)>@;; check for end of buffer, error if yes. HTWO%>:X; X; X; PT3 #SFLAG THREE'3;; increment to the next character  Q@INDEX7$R>EOL;; if at end of line, exit  FEXIT "R> !;; look for the NOT option  HFIVE$ Q>. PNFLAG;; set the nflag = ! 8 +ITHREE;; always jump to next character B FIVEL R> ;; if <$20 V EF1;; then ERROR ` %>j :t F1~ Q@INDEX7;; if >=$80 IF2;; then ERROR %> : F2 ,>;; else use character as index into the #QVALID 9;; translation table -HF3;; if the character doesn't translate %>;; then ERROR : F3 '$COUNT;; get the DIRT buffer count !PLBUFF9;; save the character !#COUNT;; increment the count *R> ;; check to see if this is a space  FSIX Q>;; not a space, so reset ( PSFLAG;; the space flag 2 FTHREE;; and always branch < SIXF /$SFLAG;; check to see if previous char was P 'HSEVEN;; a space, branch if it was Z #SFLAG;; set sflag d HTHREE;; always branch n SEVENx !"COUNT;; delete second space 0ITHREE;; always branch, if count = negative )%>;; then it is an error anyway. :) : X; X; Look for switches X; EXIT $COUNT PLBUFF9 HN0 #DFLAG !COM_EXIT N0 %> Q> $LBUFF" (> +, FEIGHT6 (> -@ HNINEJ EIGHTT &ATYPE^ ATEh 3r $LBUFF8| (> P HN1 !N>PROTCT;; Bit 0 = protected N1 (> H HN2 N>HIDDEN;; Bit 1 = Hidden N2 (> A HN3 N>ARCHIV;; Bit 2 = Archived N3 (> S HN4 N>SUBDIR;; Bit 5 = Subdir  N4 (> D& HN50 $N>DEFRAG;; Bit 6 = Defragmented : N5D (> ;; compare to a space N FELEVEN;; in order to exit X (>EOL;; compare to EOL b FELEVEN;; also to exit l %HATE;; always get next character v X; ELEVEN !R>;; if there were no flags HE1;; then ERROR %> : E1 PATTRIB 2(>EOL;; if end of line, then use default mask HTWELVE #DFLAG !COM_EXIT TWELVE 3;; skip the space  X; 7X; Here only if there is some sort of mask or path  X; NINE* X; 4 X; Check for device first > X; H QLBUFF8R R> :\ FDEV_ONEf QLBUFF8p R> :z HNO_DEV QLBUFF8 PDEVICE 3 3 3 HD1;; always jump DEV_ONE Q -R>@;; Check to see if Sparta version 4.x FV4 3 3 HNO_DEV;; always jump V4 QLBUFF8PDEVICE$3.38HD1;; always jump B NO_DEVL#DFLAG;; Set D: flag VD1` QLBUFF8j R>EOLtHP1~ !COM_EXITX; X; Search for a path X; P1*'POINT;; save current point in buffer (%COUNT;; get length of input buffer S11 QLBUFF8R> >FS3R> <FS3 R> \FS3 )POINT(HS12,< %POINTFDS2;; branch if no path PS3Z-3;; inc y so it points to char after path d'POINT2;; save y n %POINTx$>S4 QLBUFF8 PPATH932/)POINT2;; has entire path has been copied? HS4'Q> *;; Add *.* to end of path.  PPATH9 PPATH9Q> . PPATH9 Q>EOL PPATH9X; X; Copy and expand mask "X; ,X; first do filename 6X; @S2J$>TEX7^ QLBUFF8hR> *rHEX2|X; #X; Found a wildcard, so skip to +X; extension by searching for a period X; EX03 )COUNTFNO_EXT;; else clobber it QLBUFF8R> .;; if we find it FEX4;; then expand it HEX0X; EX2R> . FDO_EXT(>;; if we get too many&EEX3;; then ignore them0-PFMASK9;; save the character in the mask :EX3D2N3X )COUNTb'HEX7;; continue until end of bufferlX; v,X; if no extension, then we must assume ,X; that none is wanted. So, we clobber X; the extension. X;  NO_EXTQ> ;; grab a space PFMASK;; and clobber PFMASK ;; the extension  PFMASK HCOM_EXIT;; always exit X;  DO_EXT(>FEX4Q> ;; clobber the rest PFMASK9;; of the filename 2  HDO_EXT*EX44$>>3;; skip past the . H)COUNT;; if at the end RFNO_EXT;; then clobber it \EX5f QLBUFF8pR> *;; check for wildcard z FCOM_EXITPFMASK92(> FCOM_EXIT3 )COUNTHEX5EX6Q> PFMASK92(>HEX6X; 0X; VOILA! The command line has been parsed, #X; wasn't that great fun! YUCK! $X; .+X; Now, lets do what we were told to do 8X; and stop wasting time. BX; L COM_EXITVX; `3X; do like normal DIR and execute a chkdsk call jX; tQ>/;; Chkdsk function ~P;; ICCOM, IOCB #7 3Q>5DEVICE;; Tell CIO where to find the filenameP Q>4DEVICE, ODFLAGP DSKPR#SKPR1Q>4ENTRY;; Tell CIO where to put chkdsk info P Q>5ENTRYP Q>PP($>p;; Use IOCB #7 2 CIOV<ICE2;; Check for error F:;; Exit with an error PCE2Z*%>;; Copy Volume name to volbuf area dCE3nQENTRY8x PVOLBUF81ICE30QENTRY;; Save the number of free sectors  PFSECT QENTRY PFSECTX; ?X; Open the appropriate directory so that we can read it in 5X; the raw format. This is absolutely necessary. X; 1Q>5DEVICE;; Point to our device and pathname P Q>4DEVICE, ODFLAGDCE4"#,CE46P@0Q>;; Indicate read [4] raw [+16] directory JPT)Q>;; Indicate open channel function ^Ph$>p;; use IOCB #7 r CIOV|ICE5;; check for error :;; exit with error CE5Q>PPPQ>%;; Point command P$>p CIOV. GET_ENTRY;; get first entry in directwory X; ;; Copy directory name to dirbuf CE6& QNAME80 PDIRBUF8:1DICE6NX; XX; Print the header out. bX; l>X; Since we have the volume name, and the directory name, v;X; we can print them out right now, and not worry about X; it later. X; Q> ;; Print the header PB*Q>4HEADER;; tell E: the start address PD Q>5HEADERPE Q>HLEN;; give it the length PHQ>PI$>;; Use IOCB #0  CIOV X; =X; If an error occurs here, we don't give a damn because 2X; it would mean the user has bigger problems. *X; 4#)>;; But check for a break key>H@BK1;; anyway, so that weH%>;; can exit smoothlyR:\@BK1f=X; So, here is the main loop for reading in and printing p%X; the directory. Short, huh? :) zX; TOP GET_VALID0IMN1;; an error here means end of directory  !DIR_ENDMN1 PRINT_ENTRY!TOPX; 8X; print_entry is easier, so I'll do that one first. X; PRINT_ENTRYX; (X; copy filename and extension first X; %> $> $PE1. QNAME88 PFNAME9B0L(>VHPE2`0jPE2t1~IPE1X; X; set attributes list X; $> . QSTATT?;; skip bit 7 T?;; check bit 6 DSA1$> d;; defrag bit SA1&FATTR;; flag it :) $> .T?;; check bit 5 DSA2$> s;; subdir bit SA2( &FATTR2$> .<T?;; skip bit 4 FT?;; skip bit 3 PT?;; check bit 2 ZDSA3d$> a;; archive bit nSA3x &FATTR$> .T?;; check bit 1 DSA4$> h;; hidden bit SA4 &FATTR$> .T?;; check bit 0 DPE5$> p;; protected bit PE5 &FATTRX; (X; That wasn't so hard, now was it? X; X; "-X; Okay, now we get to the hard parts... ,7X; I need to turn the file length into a its ascii 64X; equivalent and do the same for the 3 parts of @7X; the date. Coding this myself would be a pain in J,X; SpartaDOS routine just wouldn't work. TX; ^X; watch carefully. :) hX; rX; |X; Now convert the length. X; %>CR2 QLEN8 PDVEND81ICR2 B2ASC;; convert! +%>;; copy ASCII number to output line CR4 QNUMBUF8 PFLEN81ICR4X; X &DVENDb Q>4FYYl PINDEXv Q>5FYY PINDEXCV0 %DVEND $DMIX8QDATE9;; Get date PDVEND SB2ASC%>CV1QNUMBUF8 P@INDEX71ICV1 QINDEX ;S>  PINDEX*ECV24 "INDEX>CV2H "DVENDRICV0\QFMMfR>0pHCV3zQ> PFMMCV3X; 7X; Well, that's the hard part, now we just need to X; print it. X; !Q> ;; select put buf command PB3Q>4FNAME;; give E: start address of the header PD Q>5FNAMEPEQ>%;; give it the length PHQ>PI$$>;; Use IOCB #0 . CIOV8X; B=X; If an error occurs here, we don't give a damn because L2X; it would mean the user has bigger problems. VX; `)>;; However, check forjH@BK2;; break key errort7;; and exit if found~7%>@BK2 :;; exit print_entry routine X; X; X; Now, a simple routine... X; ;; number of byteS to get PQ>P( Q>4ENTRY2P< Q>5ENTRYFPPQ>ZPd$>pn CIOVx%:X; X; =X; Now comes the hard part, validating an entry with the X; options given. X; .X; This routine has to do several things: #X; 1) read in a 23 byte entry 1X; 2) ensure that the attributes are correct,X; 3) ensure the filename fits the maskX;  GET_VALID*QBRKKEY;; Check for break key pressed. H@BK377":,@BK36 GET_ENTRY@IGV1J :;; exit if end of directory TGV1^X; check attribs first h QSTATr4FGET_VALID;; should never happen (0=end of dir) |3M>;; mask out all except deleted & write open -HGET_VALID;; skip entry if either is set  QATYPE FCHKMSK QATYPER> + FPLUSX; 2X; minus compare, any bit on rejects the entry X;  QSTAT MATTRIBHGET_VALID FCHKMSK X;  1X; plus compare, any bit on accepts the entry  X; & PLUS0 QSTAT: MATTRIBD FGET_VALIDN X; X X; check the mask b X; l CHKMSKv %> Q> PIFLAG CK1 QFMASK8 R> ? FCM2 RNAME8 FCM2 Q> PIFLAG CM2 1 ICK1!X; !9X; Examine the NOT flag. If the filename is a valid !3X; one given the mask, then IFLAG will equal 0. !7X; The NOT flag equals 0 when it is not being used. *!-X; If the NOT flag and IFLAG are the same,4!$X; then the entry is a good one. >!X; H!QNFLAG;; Get NOT flag R!,RIFLAG;; Check for fname match/no match \!1HGET_VALID;; If not equal then invalid entry f!X; p!X; Boy, was that hard! :) z!X; !Q>!:;; exit with good flag set !X; !4X; What to do at the end of the directory? This !X; is what you do.... !X; ! DIR_END!X; !&X; Convert the free sector count. !X; !%>!IF2! QFSECT8" PDVEND8"1"IIF2$" B2ASC."%>8"ED1B" QNUMBUF8L" PFRESCT8V"1`")>j"HED1t"X; ~"&X; Print out the free sector count "X; "Q> "PB" Q>4PRFS"PD" Q>5PRFS"PE"Q>"PH"Q>"PI"># CIOV #X; #X; Close IOCB #7 #X; (# CLOSE72#Q> <#PF#$>pP# CIOVZ# %>;; Indicate a good close.d# :;; All done, return to DOS. n#X;x#+X; SB2ASC - Converts a byte to 2 digits.#X;# SB2ASC#$># QDVEND#SB0#2#;#S> #ESB0#O>:#PNUMBUF#A#,$O>0$PNUMBUF$:"$X; ,$7X; This routine converts a 3 byte number to ascii. 6$X; @$ B2ASCJ$(Q>;; Set loop counter so that all T$*PDLP;; 8 possible digits are figured. ^$X; h$X; divide by 10 r$X; |$UDIV$Q>$ PDVEND$ PDVEND$ OKUDIV$$>$ DIVLP$ UDVEND$ UDVEND$ UDVEND$ UDVEND$ CHKLT$;$ QDVEND%S> % DDECCNT% PDVEND&% DECCNT0%0:% HDIVLPD% UDVENDN% UDVENDX% UDVENDb%X; l%$DLPv%,% QDVEND%O>0% PNUMBUF9%"DLP% IUDIV%X; %$>%BA3% QNUMBUF9%R> 0%HBA4%Q> % PNUMBUF9&2 &(>&HBA3 &BA4*&:4&X; >&X; Set the run addressH&X; R&\& STARTf& The source code for DIRT has not been greatly optimized, certain thingsare redundant, slow, and perhaps even badly designed. Since I did theentire project from start to finish in one week you'll have to excuse theinelegant code. If anyone has a better method of converting a 24 bit binary number intoan 8 byte ASCII number, I'm all ears. Speeding up that conversion alonewill make the program faster. No comments about not using the IOCB names and the names of otherlocations, please. I was in a hurry and didn't feel like pulling outan equate file. The program has been optimized a little, so you'll see a few weirdthings like: ldy dvend ldx dmix,y lda date,xCouldn't be helped, the code to make that more understandable was about30 lines long, and I prefer 3 lines to 30. No comments about my comments (or lack thereof) either - most of thecode is pretty straight-forward, so you can suffer through the otherconvoluted messes if you want to know exactly how this program works. Also, this was the first time I've written a program that acceptedoptions from the command line, so if it looks terrible, at least youknow why. Can't think of anything else at the moment but I'm sure somebody willthink of something for me. :)Charles Hughes DIRT.ARC should contain the following files: DIRT.DOC - Tells you how to use DIRT.COM and even more! :) DIRT.COM - The actual program. DIRT.M65 - The Mac65 source code to DIRT.COM. DIRTY.TLK - A disclaimer... README.NOW - This file. That's enough, go read the doc file now.Charles Hughes